"use strict";
/*!-----------------------------------------------------------------------------
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
 * Released under the MIT license
 * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
 *-----------------------------------------------------------------------------*/
define("vs/basic-languages/systemverilog/systemverilog", [
	"require"
], require => {
	var moduleExports = (() => {
		var __defProp = Object.defineProperty;
		var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
		var __getOwnPropNames = Object.getOwnPropertyNames;
		var __hasOwnProp = Object.prototype.hasOwnProperty;
		var __export = (target, all) => {
			for (var name in all)
				__defProp(target, name, { get: all[name], enumerable: true });
		};
		var __copyProps = (to, from, except, desc) => {
			if ((from && typeof from === "object") || typeof from === "function") {
				for (let key of __getOwnPropNames(from))
					if (!__hasOwnProp.call(to, key) && key !== except)
						__defProp(to, key, {
							get: () => from[key],
							enumerable:
								!(desc = __getOwnPropDesc(from, key)) || desc.enumerable
						});
			}
			return to;
		};
		var __toCommonJS = mod =>
			__copyProps(__defProp({}, "__esModule", { value: true }), mod);

		// src/basic-languages/systemverilog/systemverilog.ts
		var systemverilog_exports = {};
		__export(systemverilog_exports, {
			conf: () => conf,
			language: () => language
		});
		var conf = {
			comments: {
				lineComment: "//",
				blockComment: ["/*", "*/"]
			},
			brackets: [
				["{", "}"],
				["[", "]"],
				["(", ")"],
				["begin", "end"],
				["case", "endcase"],
				["casex", "endcase"],
				["casez", "endcase"],
				["checker", "endchecker"],
				["class", "endclass"],
				["clocking", "endclocking"],
				["config", "endconfig"],
				["function", "endfunction"],
				["generate", "endgenerate"],
				["group", "endgroup"],
				["interface", "endinterface"],
				["module", "endmodule"],
				["package", "endpackage"],
				["primitive", "endprimitive"],
				["program", "endprogram"],
				["property", "endproperty"],
				["specify", "endspecify"],
				["sequence", "endsequence"],
				["table", "endtable"],
				["task", "endtask"]
			],
			autoClosingPairs: [
				{ open: "[", close: "]" },
				{ open: "{", close: "}" },
				{ open: "(", close: ")" },
				{ open: "'", close: "'", notIn: ["string", "comment"] },
				{ open: '"', close: '"', notIn: ["string"] }
			],
			surroundingPairs: [
				{ open: "{", close: "}" },
				{ open: "[", close: "]" },
				{ open: "(", close: ")" },
				{ open: '"', close: '"' },
				{ open: "'", close: "'" }
			],
			folding: {
				offSide: false,
				markers: {
					start: new RegExp(
						"^(?:\\s*|.*(?!\\/[\\/\\*])[^\\w])(?:begin|case(x|z)?|class|clocking|config|covergroup|function|generate|interface|module|package|primitive|property|program|sequence|specify|table|task)\\b"
					),
					end: new RegExp(
						"^(?:\\s*|.*(?!\\/[\\/\\*])[^\\w])(?:end|endcase|endclass|endclocking|endconfig|endgroup|endfunction|endgenerate|endinterface|endmodule|endpackage|endprimitive|endproperty|endprogram|endsequence|endspecify|endtable|endtask)\\b"
					)
				}
			}
		};
		var language = {
			defaultToken: "",
			tokenPostfix: ".sv",
			brackets: [
				{ token: "delimiter.curly", open: "{", close: "}" },
				{ token: "delimiter.parenthesis", open: "(", close: ")" },
				{ token: "delimiter.square", open: "[", close: "]" },
				{ token: "delimiter.angle", open: "<", close: ">" }
			],
			keywords: [
				"accept_on",
				"alias",
				"always",
				"always_comb",
				"always_ff",
				"always_latch",
				"and",
				"assert",
				"assign",
				"assume",
				"automatic",
				"before",
				"begin",
				"bind",
				"bins",
				"binsof",
				"bit",
				"break",
				"buf",
				"bufif0",
				"bufif1",
				"byte",
				"case",
				"casex",
				"casez",
				"cell",
				"chandle",
				"checker",
				"class",
				"clocking",
				"cmos",
				"config",
				"const",
				"constraint",
				"context",
				"continue",
				"cover",
				"covergroup",
				"coverpoint",
				"cross",
				"deassign",
				"default",
				"defparam",
				"design",
				"disable",
				"dist",
				"do",
				"edge",
				"else",
				"end",
				"endcase",
				"endchecker",
				"endclass",
				"endclocking",
				"endconfig",
				"endfunction",
				"endgenerate",
				"endgroup",
				"endinterface",
				"endmodule",
				"endpackage",
				"endprimitive",
				"endprogram",
				"endproperty",
				"endspecify",
				"endsequence",
				"endtable",
				"endtask",
				"enum",
				"event",
				"eventually",
				"expect",
				"export",
				"extends",
				"extern",
				"final",
				"first_match",
				"for",
				"force",
				"foreach",
				"forever",
				"fork",
				"forkjoin",
				"function",
				"generate",
				"genvar",
				"global",
				"highz0",
				"highz1",
				"if",
				"iff",
				"ifnone",
				"ignore_bins",
				"illegal_bins",
				"implements",
				"implies",
				"import",
				"incdir",
				"include",
				"initial",
				"inout",
				"input",
				"inside",
				"instance",
				"int",
				"integer",
				"interconnect",
				"interface",
				"intersect",
				"join",
				"join_any",
				"join_none",
				"large",
				"let",
				"liblist",
				"library",
				"local",
				"localparam",
				"logic",
				"longint",
				"macromodule",
				"matches",
				"medium",
				"modport",
				"module",
				"nand",
				"negedge",
				"nettype",
				"new",
				"nexttime",
				"nmos",
				"nor",
				"noshowcancelled",
				"not",
				"notif0",
				"notif1",
				"null",
				"or",
				"output",
				"package",
				"packed",
				"parameter",
				"pmos",
				"posedge",
				"primitive",
				"priority",
				"program",
				"property",
				"protected",
				"pull0",
				"pull1",
				"pulldown",
				"pullup",
				"pulsestyle_ondetect",
				"pulsestyle_onevent",
				"pure",
				"rand",
				"randc",
				"randcase",
				"randsequence",
				"rcmos",
				"real",
				"realtime",
				"ref",
				"reg",
				"reject_on",
				"release",
				"repeat",
				"restrict",
				"return",
				"rnmos",
				"rpmos",
				"rtran",
				"rtranif0",
				"rtranif1",
				"s_always",
				"s_eventually",
				"s_nexttime",
				"s_until",
				"s_until_with",
				"scalared",
				"sequence",
				"shortint",
				"shortreal",
				"showcancelled",
				"signed",
				"small",
				"soft",
				"solve",
				"specify",
				"specparam",
				"static",
				"string",
				"strong",
				"strong0",
				"strong1",
				"struct",
				"super",
				"supply0",
				"supply1",
				"sync_accept_on",
				"sync_reject_on",
				"table",
				"tagged",
				"task",
				"this",
				"throughout",
				"time",
				"timeprecision",
				"timeunit",
				"tran",
				"tranif0",
				"tranif1",
				"tri",
				"tri0",
				"tri1",
				"triand",
				"trior",
				"trireg",
				"type",
				"typedef",
				"union",
				"unique",
				"unique0",
				"unsigned",
				"until",
				"until_with",
				"untyped",
				"use",
				"uwire",
				"var",
				"vectored",
				"virtual",
				"void",
				"wait",
				"wait_order",
				"wand",
				"weak",
				"weak0",
				"weak1",
				"while",
				"wildcard",
				"wire",
				"with",
				"within",
				"wor",
				"xnor",
				"xor"
			],
			builtin_gates: [
				"and",
				"nand",
				"nor",
				"or",
				"xor",
				"xnor",
				"buf",
				"not",
				"bufif0",
				"bufif1",
				"notif1",
				"notif0",
				"cmos",
				"nmos",
				"pmos",
				"rcmos",
				"rnmos",
				"rpmos",
				"tran",
				"tranif1",
				"tranif0",
				"rtran",
				"rtranif1",
				"rtranif0"
			],
			operators: [
				"=",
				"+=",
				"-=",
				"*=",
				"/=",
				"%=",
				"&=",
				"|=",
				"^=",
				"<<=",
				">>+",
				"<<<=",
				">>>=",
				"?",
				":",
				"+",
				"-",
				"!",
				"~",
				"&",
				"~&",
				"|",
				"~|",
				"^",
				"~^",
				"^~",
				"+",
				"-",
				"*",
				"/",
				"%",
				"==",
				"!=",
				"===",
				"!==",
				"==?",
				"!=?",
				"&&",
				"||",
				"**",
				"<",
				"<=",
				">",
				">=",
				"&",
				"|",
				"^",
				">>",
				"<<",
				">>>",
				"<<<",
				"++",
				"--",
				"->",
				"<->",
				"inside",
				"dist",
				"::",
				"+:",
				"-:",
				"*>",
				"&&&",
				"|->",
				"|=>",
				"#=#"
			],
			symbols: /[=><!~?:&|+\-*\/\^%#]+/,
			escapes: /%%|\\(?:[antvf\\"']|x[0-9A-Fa-f]{1,2}|[0-7]{1,3})/,
			identifier: /(?:[a-zA-Z_][a-zA-Z0-9_$\.]*|\\\S+ )/,
			systemcall: /[$][a-zA-Z0-9_]+/,
			timeunits: /s|ms|us|ns|ps|fs/,
			tokenizer: {
				root: [
					[
						/^(\s*)(@identifier)/,
						[
							"",
							{
								cases: {
									"@builtin_gates": {
										token: "keyword.$2",
										next: "@module_instance"
									},
									table: {
										token: "keyword.$2",
										next: "@table"
									},
									"@keywords": { token: "keyword.$2" },
									"@default": {
										token: "identifier",
										next: "@module_instance"
									}
								}
							}
						]
					],
					[
						/^\s*`include/,
						{ token: "keyword.directive.include", next: "@include" }
					],
					[/^\s*`\s*\w+/, "keyword"],
					{ include: "@identifier_or_keyword" },
					{ include: "@whitespace" },
					[/\(\*.*\*\)/, "annotation"],
					[/@systemcall/, "variable.predefined"],
					[/[{}()\[\]]/, "@brackets"],
					[/[<>](?!@symbols)/, "@brackets"],
					[
						/@symbols/,
						{
							cases: {
								"@operators": "delimiter",
								"@default": ""
							}
						}
					],
					{ include: "@numbers" },
					[/[;,.]/, "delimiter"],
					{ include: "@strings" }
				],
				identifier_or_keyword: [
					[
						/@identifier/,
						{
							cases: {
								"@keywords": { token: "keyword.$0" },
								"@default": "identifier"
							}
						}
					]
				],
				numbers: [
					[/\d+?[\d_]*(?:\.[\d_]+)?[eE][\-+]?\d+/, "number.float"],
					[/\d+?[\d_]*\.[\d_]+(?:\s*@timeunits)?/, "number.float"],
					[/(?:\d+?[\d_]*\s*)?'[sS]?[dD]\s*[0-9xXzZ?]+?[0-9xXzZ?_]*/, "number"],
					[
						/(?:\d+?[\d_]*\s*)?'[sS]?[bB]\s*[0-1xXzZ?]+?[0-1xXzZ?_]*/,
						"number.binary"
					],
					[
						/(?:\d+?[\d_]*\s*)?'[sS]?[oO]\s*[0-7xXzZ?]+?[0-7xXzZ?_]*/,
						"number.octal"
					],
					[
						/(?:\d+?[\d_]*\s*)?'[sS]?[hH]\s*[0-9a-fA-FxXzZ?]+?[0-9a-fA-FxXzZ?_]*/,
						"number.hex"
					],
					[/1step/, "number"],
					[/[\dxXzZ]+?[\dxXzZ_]*(?:\s*@timeunits)?/, "number"],
					[/'[01xXzZ]+/, "number"]
				],
				module_instance: [
					{ include: "@whitespace" },
					[/(#?)(\()/, ["", { token: "@brackets", next: "@port_connection" }]],
					[/@identifier\s*[;={}\[\],]/, { token: "@rematch", next: "@pop" }],
					[/@symbols|[;={}\[\],]/, { token: "@rematch", next: "@pop" }],
					[/@identifier/, "type"],
					[/;/, "delimiter", "@pop"]
				],
				port_connection: [
					{ include: "@identifier_or_keyword" },
					{ include: "@whitespace" },
					[/@systemcall/, "variable.predefined"],
					{ include: "@numbers" },
					{ include: "@strings" },
					[/[,]/, "delimiter"],
					[/\(/, "@brackets", "@port_connection"],
					[/\)/, "@brackets", "@pop"]
				],
				whitespace: [
					[/[ \t\r\n]+/, ""],
					[/\/\*/, "comment", "@comment"],
					[/\/\/.*$/, "comment"]
				],
				comment: [
					[/[^\/*]+/, "comment"],
					[/\*\//, "comment", "@pop"],
					[/[\/*]/, "comment"]
				],
				strings: [
					[/"([^"\\]|\\.)*$/, "string.invalid"],
					[/"/, "string", "@string"]
				],
				string: [
					[/[^\\"]+/, "string"],
					[/@escapes/, "string.escape"],
					[/\\./, "string.escape.invalid"],
					[/"/, "string", "@pop"]
				],
				include: [
					[
						/(\s*)(")([\w*\/*]*)(.\w*)(")/,
						[
							"",
							"string.include.identifier",
							"string.include.identifier",
							"string.include.identifier",
							{ token: "string.include.identifier", next: "@pop" }
						]
					],
					[
						/(\s*)(<)([\w*\/*]*)(.\w*)(>)/,
						[
							"",
							"string.include.identifier",
							"string.include.identifier",
							"string.include.identifier",
							{ token: "string.include.identifier", next: "@pop" }
						]
					]
				],
				table: [
					{ include: "@whitespace" },
					[/[()]/, "@brackets"],
					[/[:;]/, "delimiter"],
					[/[01\-*?xXbBrRfFpPnN]/, "variable.predefined"],
					["endtable", "keyword.endtable", "@pop"]
				]
			}
		};
		return __toCommonJS(systemverilog_exports);
	})();
	return moduleExports;
});
